package likou;

import java.util.*;

/**
 * @description: 最小栈
 * @title: MinStack
 * @author: zp
 * @date: 2022/2/11 20:15
 * 设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。
 *
 * push(x) —— 将元素 x 推入栈中。
 * pop() —— 删除栈顶的元素。
 * top() —— 获取栈顶元素。
 * getMin() —— 检索栈中的最小元素。
 */
public class MinStack {
    private Stack<Integer> stack;
    private List<Integer> list;
    private int min;
    public MinStack() {
        stack = new Stack<>();
        list = new ArrayList<>();
    }

    public void push(int val) {
        if(stack.size()==0){
            min = val;
        }else {
            min = Math.min(min,val);
        }
        stack.push(val);
        list.add(val);
    }

    public void pop() {
        if(stack.peek()==min&&stack.size()>1){
            list.remove(stack.peek());
            Collections.sort(list);
            min = list.get(0);
            stack.pop();
        }else{
            list.remove(stack.peek());
            stack.pop();
        }

    }

    public int top() {
        return stack.peek();
    }

    public int getMin() {
        return min;
    }
}
